#ifndef LAYER_H
#define LAYER_H

#include <vector>

class Layer {
public:
    // 保持初始化签名不变，因为初始化通常只依赖于层的大小，而不是输入数据的批量大小
    virtual void init(size_t inputSize, size_t outputSize) = 0;

    // 修改前向传播方法以支持批量数据
    // 输入和输出现在是二维向量，其中每个内部向量代表一个样本
    virtual std::vector<std::vector<float>> forward(const std::vector<std::vector<float>>& inputs) = 0;

    // 修改反向传播方法以支持批量数据
    // 输入是上一层的梯度（一个二维向量），输出是对当前层输入的梯度（也是一个二维向量）
    virtual std::vector<std::vector<float>> backward(const std::vector<std::vector<float>>& gradients) = 0;
};

#endif // LAYER_H
